package org.fisco.bcos.sdk.demo.contract;

import java.math.BigInteger;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.fisco.bcos.sdk.v3.client.Client;
import org.fisco.bcos.sdk.v3.codec.abi.FunctionEncoder;
import org.fisco.bcos.sdk.v3.codec.datatypes.DynamicArray;
import org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes;
import org.fisco.bcos.sdk.v3.codec.datatypes.DynamicStruct;
import org.fisco.bcos.sdk.v3.codec.datatypes.Function;
import org.fisco.bcos.sdk.v3.codec.datatypes.Type;
import org.fisco.bcos.sdk.v3.codec.datatypes.TypeReference;
import org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String;
import org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32;
import org.fisco.bcos.sdk.v3.codec.datatypes.generated.Int128;
import org.fisco.bcos.sdk.v3.codec.datatypes.generated.Int32;
import org.fisco.bcos.sdk.v3.codec.datatypes.generated.StaticArray1;
import org.fisco.bcos.sdk.v3.codec.datatypes.generated.StaticArray2;
import org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint128;
import org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint8;
import org.fisco.bcos.sdk.v3.codec.datatypes.generated.tuples.generated.Tuple1;
import org.fisco.bcos.sdk.v3.codec.datatypes.generated.tuples.generated.Tuple2;
import org.fisco.bcos.sdk.v3.codec.datatypes.generated.tuples.generated.Tuple3;
import org.fisco.bcos.sdk.v3.contract.Contract;
import org.fisco.bcos.sdk.v3.crypto.CryptoSuite;
import org.fisco.bcos.sdk.v3.crypto.keypair.CryptoKeyPair;
import org.fisco.bcos.sdk.v3.model.CryptoType;
import org.fisco.bcos.sdk.v3.model.TransactionReceipt;
import org.fisco.bcos.sdk.v3.model.callback.TransactionCallback;
import org.fisco.bcos.sdk.v3.transaction.manager.transactionv1.ProxySignTransactionManager;
import org.fisco.bcos.sdk.v3.transaction.manager.transactionv1.TransactionManager;
import org.fisco.bcos.sdk.v3.transaction.model.exception.ContractException;

@SuppressWarnings("unchecked")
public class ComplexCodecTest extends Contract {
    public static final String[] BINARY_ARRAY = {"60806040523480156200001157600080fd5b5060405162002f7938038062002f79833981016040819052620000349162000329565b8051805182916004916200005091839160209091019062000076565b5060208281015180516200006b9260018501920190620000da565b5090505050620004f5565b828054828255906000526020600020908101928215620000c8579160200282015b82811115620000c85782518051620000b791849160209091019062000126565b509160200191906001019062000097565b50620000d6929150620001a2565b5090565b82805482825590600052602060002090810192821562000118579160200282015b8281111562000118578251825591602001919060010190620000fb565b50620000d6929150620001c3565b8280546200013490620004b8565b90600052602060002090601f01602090048101928262000158576000855562000118565b82601f106200017357805160ff191683800117855562000118565b8280016001018555821562000118579182018281111562000118578251825591602001919060010190620000fb565b80821115620000d6576000620001b98282620001da565b50600101620001a2565b5b80821115620000d65760008155600101620001c4565b508054620001e890620004b8565b6000825580601f10620001f9575050565b601f016020900490600052602060002090810190620002199190620001c3565b50565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156200025757620002576200021c565b60405290565b604051601f8201601f191681016001600160401b03811182821017156200028857620002886200021c565b604052919050565b60006001600160401b03821115620002ac57620002ac6200021c565b5060051b60200190565b600082601f830112620002c857600080fd5b81516020620002e1620002db8362000290565b6200025d565b82815260059290921b840181019181810190868411156200030157600080fd5b8286015b848110156200031e578051835291830191830162000305565b509695505050505050565b600060208083850312156200033d57600080fd5b82516001600160401b03808211156200035557600080fd5b818501915060408083880312156200036c57600080fd5b6200037662000232565b8351838111156200038657600080fd5b8401601f810189136200039857600080fd5b8051620003a9620002db8262000290565b81815260059190911b8201870190878101908b831115620003c957600080fd5b8884015b838110156200047e57805188811115620003e75760008081fd5b8501603f81018e13620003fa5760008081fd5b8a810151898111156200041157620004116200021c565b62000425601f8201601f19168d016200025d565b8181528f8a8385010111156200043b5760008081fd5b60005b828110156200045b578381018b01518282018f01528d016200043e565b828111156200046d5760008e84840101525b5085525050918901918901620003cd565b508452505050838501519150828211156200049857600080fd5b620004a688838601620002b6565b85820152809550505050505092915050565b600181811c90821680620004cd57607f821691505b60208210811415620004ef57634e487b7160e01b600052602260045260246000fd5b50919050565b612a7480620005056000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063793f0d221161009757806395c0bf161161006657806395c0bf161461025d578063a1e122e014610270578063b837ecdc14610291578063c4d6d214146102b157600080fd5b8063793f0d22146101ea578063840ac22d146101fd578063873665a11461021d5780639091aad41461023d57600080fd5b8063393c9451116100d3578063393c945114610184578063507968e11461019757806367481cfc146101b75780636e446ffb146101d757600080fd5b80630413cfad146101055780631592c9921461012e5780631af01f3f1461014f578063219d62901461016f575b600080fd5b610118610113366004611cb5565b6102c4565b6040516101259190611e23565b60405180910390f35b61014161013c366004611ec8565b6103fb565b604051908152602001610125565b61016261015d366004611f50565b610438565b604051610125919061207a565b610177610627565b60405161012591906120dc565b6101776101923660046121dc565b61091e565b6101aa6101a5366004611ec8565b610ad9565b6040516101259190612218565b6101ca6101c5366004612259565b610b9e565b6040516101259190612343565b6101416101e5366004611ec8565b610cb0565b6101776101f8366004612351565b610ce5565b61021061020b3660046123ce565b610f46565b60405161012591906124c5565b61023061022b366004612546565b61105d565b6040516101259190612579565b61025061024b3660046125c7565b6111ce565b604051610125919061266a565b6101aa61026b366004611ec8565b611273565b61028361027e3660046121dc565b6112af565b6040516101259291906126cc565b6102a461029f366004612719565b6113c0565b60405161012591906127f2565b6101626102bf36600461285b565b611449565b80516060906102da906000906020850190611603565b506000805480602002602001604051908101604052809291908181526020016000905b828210156103f057838290600052602060002001805480602002602001604051908101604052809291908181526020016000905b828210156103dd5783829060005260206000200180546103509061295d565b80601f016020809104026020016040519081016040528092919081815260200182805461037c9061295d565b80156103c95780601f1061039e576101008083540402835291602001916103c9565b820191906000526020600020905b8154815290600101906020018083116103ac57829003601f168201915b505050505081526020019060010190610331565b50505050815260200190600101906102fd565b505050509050919050565b6001828154811061040b57600080fd5b90600052602060002001818154811061042357600080fd5b90600052602060002001600091509150505481565b6040805180820182526060808252602082015281516001808252818401909352909160009190816020015b6060815260200190600190039081610463579050509050838160008151811061048e5761048e612998565b6020026020010181905250604051806040016040528082815260200184815250600460008201518160000190805190602001906104cc929190611660565b5060208281015180516104e592600185019201906116b9565b505060408051600480546060602082028401810185529383018181529294509092849291849160009085015b828210156105bd5783829060005260206000200180546105309061295d565b80601f016020809104026020016040519081016040528092919081815260200182805461055c9061295d565b80156105a95780601f1061057e576101008083540402835291602001916105a9565b820191906000526020600020905b81548152906001019060200180831161058c57829003601f168201915b505050505081526020019060010190610511565b5050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561061457602002820191906000526020600020905b815481526020019060010190808311610600575b5050505050815250509150505b92915050565b604080516002808252606082810190935260009190816020015b6040805180820190915260608082526020820152815260200190600190039081610641579050506040805160048054606060208202840181018552938301818152949550919390928492849160009085015b8282101561073f5783829060005260206000200180546106b29061295d565b80601f01602080910402602001604051908101604052809291908181526020018280546106de9061295d565b801561072b5780601f106107005761010080835404028352916020019161072b565b820191906000526020600020905b81548152906001019060200180831161070e57829003601f168201915b505050505081526020019060010190610693565b5050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561079657602002820191906000526020600020905b815481526020019060010190808311610782575b505050505081525050816000815181106107b2576107b2612998565b6020026020010181905250600460405180604001604052908160008201805480602002602001604051908101604052809291908181526020016000905b8282101561089b57838290600052602060002001805461080e9061295d565b80601f016020809104026020016040519081016040528092919081815260200182805461083a9061295d565b80156108875780601f1061085c57610100808354040283529160200191610887565b820191906000526020600020905b81548152906001019060200180831161086a57829003601f168201915b5050505050815260200190600101906107ef565b505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156108f257602002820191906000526020600020905b8154815260200190600101908083116108de575b5050505050815250508160018151811061090e5761090e612998565b6020908102919091010152919050565b604080516002808252606082810190935260009190816020015b6040805180820190915260608082526020820152815260200190600190039081610938579050506040805160048054606060208202840181018552938301818152949550919390928492849160009085015b82821015610a365783829060005260206000200180546109a99061295d565b80601f01602080910402602001604051908101604052809291908181526020018280546109d59061295d565b8015610a225780601f106109f757610100808354040283529160200191610a22565b820191906000526020600020905b815481529060010190602001808311610a0557829003601f168201915b50505050508152602001906001019061098a565b50505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015610a8d57602002820191906000526020600020905b815481526020019060010190808311610a79575b50505050508152505081600081518110610aa957610aa9612998565b60200260200101819052508281600181518110610ac857610ac8612998565b602090810291909101015292915050565b60008281548110610ae957600080fd5b906000526020600020018181548110610b","0157600080fd5b90600052602060002001600091509150508054610b1d9061295d565b80601f0160208091040260200160405190810160405280929190818152602001828054610b499061295d565b8015610b965780601f10610b6b57610100808354040283529160200191610b96565b820191906000526020600020905b815481529060010190602001808311610b7957829003601f168201915b505050505081565b610ba6611700565b604051806060016040528083600001516001610bc291906129c4565b600f0b815260200183602001516001610bdb9190612a13565b6001600160801b0390811682526040808601516020938401528351928401518216600160801b029290911691909117600690815590820151610c21906007906001611724565b50506040805160608101825260068054600f81900b8352600160801b90046001600160801b031660208084019190915283519081018085529294509092840191600790600190826000855b825461010083900a900460030b8152602060078301819004938401936001036004909301929092029101808411610c6c5790505b5050505050815250509050919050565b60038281548110610cc057600080fd5b90600052602060002090600202018160028110610cdc57600080fd5b01549150829050565b604080516002808252606082810190935260009190816020015b6060815260200190600190039081610cff5790505090508481600081518110610d2a57610d2a612998565b602002602001018190525060405180604001604052808281526020018581525060046000820151816000019080519060200190610d68929190611660565b506020828101518051610d8192600185019201906116b9565b5090505060008360ff166001600160401b03811115610da257610da2611b71565b604051908082528060200260200182016040528015610de757816020015b6040805180820190915260608082526020820152815260200190600190039081610dc05790505b506040805160048054606060208202840181018552938301818152949550919390928492849160009085015b82821015610ebf578382906000526020600020018054610e329061295d565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5e9061295d565b8015610eab5780601f10610e8057610100808354040283529160200191610eab565b820191906000526020600020905b815481529060010190602001808311610e8e57829003601f168201915b505050505081526020019060010190610e13565b50505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015610f1657602002820191906000526020600020905b815481526020019060010190808311610f02575b50505050508152505081600081518110610f3257610f32612998565b602090810291909101015295945050505050565b8051606090610f5c9060029060208501906117be565b506002805480602002602001604051908101604052809291908181526020016000905b828210156103f057600084815260208120604080518082019091529160028086029092019190835b8282101561104a578382018054610fbd9061295d565b80601f0160208091040260200160405190810160405280929190818152602001828054610fe99061295d565b80156110365780601f1061100b57610100808354040283529160200191611036565b820191906000526020600020905b81548152906001019060200180831161101957829003601f168201915b505050505081526020019060010190610fa7565b5050505081526020019060010190610f7f565b60408051602080820183526001808352835160608181018652600f88900b82526001600160801b03878116948301859052958201859052948716600160801b909302929092176006908155906110b7906007908590611724565b50506040805160608082018352600f88900b82526001600160801b03871660208301528183018590528251600280825291810190935290925060009190816020015b611101611700565b8152602001906001900390816110f9579050506040805160608101825260068054600f81900b8352600160801b90046001600160801b031660208084019190915283519081018085529495509193909284019190600790600190826000855b825461010083900a900460030b8152602060078301819004938401936001036004909301929092029101808411611160579050505050505081525050816000815181106111af576111af612998565b60200260200101819052508181600181518110610f3257610f32612998565b80516060906111e4906001906020850190611814565b506001805480602002602001604051908101604052809291908181526020016000905b828210156103f05760008481526020908190208301805460408051828502810185019091528181529283018282801561125f57602002820191906000526020600020905b81548152602001906001019080831161124b575b505050505081526020019060010190611207565b6002828154811061128357600080fd5b9060005260206000209060020201816002811061129f57600080fd5b018054909250610b1d915061295d565b604080518082019091526060808252602082015260606112e2604051806040016040528060608152602001606081525090565b8351805185916004916112fc918391602090910190611660565b50602082810151805161131592600185019201906116b9565b50600291506113219050565b60405190808252806020026020018201604052801561136657816020015b604080518082019091526060808252602082015281526020019060019003908161133f5790505b5060208201819052805185919060009061138257611382612998565b60200260200101819052508381602001516001815181106113a5576113a5612998565b60200260200101819052508081602001519250925050915091565b80516060906113d690600390602085019061186d565b506003805480602002602001604051908101604052809291908181526020016000905b828210156103f05760008481526020902060408051808201918290529160028581029091019182845b815481526020019060010190808311611422575050505050815260200190600101906113f9565b604080518082019091526060808252602082015260008260200151511161146f57600080fd5b816020015160008151811061148657611486612998565b6020026020010151600460008201518160000190805190602001906114ac929190611660565b5060208281015180516114c592600185019201906116b9565b505060408051600480546060602082028401810185529383018181529294509092849291849160009085015b8282101561159d5783829060005260206000200180546115109061295d565b80601f016020809104026020016040519081016040528092919081815260200182805461153c9061295d565b80156115895780601f1061155e57610100808354040283529160200191611589565b820191906000526020600020905b81548152906001019060200180831161156c57829003601f168201915b5050505050815260200190600101906114f1565b50505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015610ca057602002820191906000526020600020905b8154815260200190600101908083116115e0575050505050815250509050919050565b828054828255906000526020600020908101928215611650579160200282015b8281111561165057825180516116409184916020909101906118c3565b5091602001919060010190611623565b5061165c92915061191c565b5090565b8280548282559060005260206000209081019282156116ad579160200282015b828111156116ad578251805161169d918491602090910190611939565b5091602001919060010190611680565b5061165c9291506119ac565b8280548282559060005260206000209081019282156116f4579160200282015b828111156116f45782518255916020019190600101906116d9565b5061165c9291506119c9565b604080516060810182526000808252602082015290810161171f6119de565b905290565b6001830191839082156116f45791602002820160005b8382111561178157835183826101000a81548163ffffffff021916908360030b63ffffffff160217905550926020019260040160208160030104928301926001030261173a565b80156117b15782816101000a81549063ffffffff0219169055600401602081600301049283019260010302611781565b505061165c9291506119c9565b828054828255906000526020600020906002028101928215611808579160200282015b828111156118085782516117f890839060026119fc565b50916020019190600201906117e1565b5061165c929150611a3c565b828054828255906000526020600020908101928215611861579160200282015b8281111561186157825180516118519184916020909101906116b9565b5091602001919060010190611834565b5061165c929150611a59565b8280548282559060005260206000209060020281019282156118b7579160200282015b828111156118b75782516118a79083906002611a76565b5091602001919060020190611890565b5061165c929150611aa3565b828054828255906000526020600020908101928215611910579160200282015b828111156119105782518051611900918491602090910190611939565b50916020019190600101906118e3565b5061165c929150611abd565b8082111561165c5760006119308282611ada565b5060010161191c565b8280546119459061295d565b90600052602060002090601f01602090048101928261196757600085556116f4565b82601f1061198057805160ff19168380011785556116f4565b828001600101855582156116f457918201828111156116f45782518255916020019190600101906116d9565b8082111561165c5760006119c08282611afb565b506001016119ac565b5b8082111561165c57600081556001016119ca565b60405180602001604052806001906020820280368337509192915050565b8260028101928215611910579160200282015b828111156119105782518051611a2c918491602090910190611939565b5091602001919060010190611a0f565b8082111561165c576000611a508282611b35565b50600201611a3c565b8082111561165c576000611a6d8282611b53565b50600101611a59565b82600281019282156116f457916020028201828111156116f45782518255916020019190600101906116d9565b8082111561165c5760008082556001820155600201611aa3565b8082111561165c576000611ad18282611afb565b50600101611abd565b5080546000825590600052602060002090810190611af89190611abd565b5056","5b508054611b079061295d565b6000825580601f10611b17575050565b601f016020900490600052602060002090810190611af891906119c9565b506000611b428282611afb565b50611b51906001016000611afb565b565b5080546000825590600052602060002090810190611af891906119c9565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715611ba957611ba9611b71565b60405290565b604051606081016001600160401b0381118282101715611ba957611ba9611b71565b604051602081016001600160401b0381118282101715611ba957611ba9611b71565b604051601f8201601f191681016001600160401b0381118282101715611c1b57611c1b611b71565b604052919050565b60006001600160401b03821115611c3c57611c3c611b71565b5060051b60200190565b600082601f830112611c5757600080fd5b81356001600160401b03811115611c7057611c70611b71565b611c83601f8201601f1916602001611bf3565b818152846020838601011115611c9857600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215611cc857600080fd5b6001600160401b038084351115611cde57600080fd5b8335840185601f820112611cf157600080fd5b8035611d04611cff82611c23565b611bf3565b81815260059190911b82018401908481019088831115611d2357600080fd5b8584015b83811015611dc9578581351115611d3d57600080fd5b803585018a603f820112611d5057600080fd5b87810135611d60611cff82611c23565b81815260059190911b820160400190898101908d831115611d8057600080fd5b604084015b83811015611db8578a81351115611d9b57600080fd5b611dab8f60408335880101611c46565b8352918b01918b01611d85565b508652505050918601918601611d27565b5098975050505050505050565b6000815180845260005b81811015611dfc57602081850181015186830182015201611de0565b81811115611e0e576000602083870101525b50601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060059250604081841b8701018488016000805b84811015611eb957898403603f19018652825180518086529089019089860190808a1b87018b01855b82811015611ea357601f19898303018452611e91828651611dd6565b948d0194938d01939150600101611e75565b50988b0198965050509288019250600101611e4c565b50919998505050505050505050565b60008060408385031215611edb57600080fd5b50508035926020909101359150565b600082601f830112611efb57600080fd5b81356020611f0b611cff83611c23565b82815260059290921b84018101918181019086841115611f2a57600080fd5b8286015b84811015611f455780358352918301918301611f2e565b509695505050505050565b60008060408385031215611f6357600080fd5b82356001600160401b0380821115611f7a57600080fd5b611f8686838701611c46565b93506020850135915080821115611f9c57600080fd5b50611fa985828601611eea565b9150509250929050565b600081518084526020808501808196508360051b8101915082860160005b85811015611ffb578284038952611fe9848351611dd6565b98850198935090840190600101611fd1565b5091979650505050505050565b600081518084526020808501945080840160005b838110156120385781518752958201959082019060010161201c565b509495945050505050565b60008151604084526120586040850182611fb3565b9050602083015184820360208601526120718282612008565b95945050505050565b60208152600061208d6020830184612043565b9392505050565b600081518084526020808501808196508360051b8101915082860160005b85811015611ffb5782840389526120ca848351612043565b988501989350908401906001016120b2565b60208152600061208d6020830184612094565b600082601f83011261210057600080fd5b81356020612110611cff83611c23565b82815260059290921b8401810191818101908684111561212f57600080fd5b8286015b84811015611f455780356001600160401b038111156121525760008081fd5b6121608986838b0101611c46565b845250918301918301612133565b60006040828403121561218057600080fd5b612188611b87565b905081356001600160401b03808211156121a157600080fd5b6121ad858386016120ef565b835260208401359150808211156121c357600080fd5b506121d084828501611eea565b60208301525092915050565b6000602082840312156121ee57600080fd5b81356001600160401b0381111561220457600080fd5b6122108482850161216e565b949350505050565b60208152600061208d6020830184611dd6565b8035600f81900b811461223d57600080fd5b919050565b80356001600160801b038116811461223d57600080fd5b60006060828403121561226b57600080fd5b612273611baf565b61227c8361222b565b8152602061228b818501612242565b8183015284605f85011261229e57600080fd5b6122a6611bd1565b8060608601878111156122b857600080fd5b604087015b818110156122e45780358060030b81146122d75760008081fd5b84529284019284016122bd565b505060408401525090949350505050565b8051600f0b825260206001600160801b0381830151168184015260408201516040840160005b600181101561233b57825160030b8252918301919083019060010161231b565b505050505050565b6060810161062182846122f5565b60008060006060848603121561236657600080fd5b83356001600160401b038082111561237d57600080fd5b61238987838801611c46565b9450602086013591508082111561239f57600080fd5b506123ac86828701611eea565b925050604084013560ff811681146123c357600080fd5b809150509250925092565b600060208083850312156123e157600080fd5b6001600160401b0380843511156123f757600080fd5b8335840185601f82011261240a57600080fd5b8035612418611cff82611c23565b81815260059190911b8201840190848101908883111561243757600080fd5b8584015b83811015611dc957858135111561245157600080fd5b803585018a603f82011261246457600080fd5b61246c611b87565b80606083018d81111561247e57600080fd5b8a84015b818110156124b4578a8135111561249857600080fd5b6124a78f8d8335880101611c46565b8452928b01928b01612482565b50508552505091860191860161243b565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b84811015611eb957898403603f19018652825184888101845b600281101561253157878203835261251f828551611dd6565b938c0193928c01929150600101612506565b50978a019795505050918701916001016124ed565b6000806040838503121561255957600080fd5b6125628361222b565b915061257060208401612242565b90509250929050565b6020808252825182820181905260009190848201906040850190845b818110156125bb576125a88385516122f5565b9284019260609290920191600101612595565b50909695505050505050565b600060208083850312156125da57600080fd5b82356001600160401b03808211156125f157600080fd5b818501915085601f83011261260557600080fd5b8135612613611cff82611c23565b81815260059190911b8301840190848101908883111561263257600080fd5b8585015b83811015611dc95780358581111561264e5760008081fd5b61265c8b89838a0101611eea565b845250918601918601612636565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156126bf57603f198886030184526126ad858351612008565b94509285019290850190600101612691565b5092979650505050505050565b60408152600083516040808401526126e76080840182611fb3565b90506020850151603f198483030160608501526127048282612094565b91505082810360208401526120718185612094565b6000602080838503121561272c57600080fd5b82356001600160401b0381111561274257600080fd5b8301601f808201861361275457600080fd5b8135612762611cff82611c23565b81815260069190911b8301840190848101908883111561278157600080fd5b938501935b828510156127e657888486011261279d5760008081fd5b6127a5611b87565b80604087018b8111156127b85760008081fd5b875b818110156127d157803584529289019289016127ba565b50508352506040949094019390850190612786565b98975050505050505050565b60208082528251828201819052600091906040908185019086840185805b8381101561284d57825185835b600281101561283a5782518252918901919089019060010161281d565b5050509385019391860191600101612810565b509298975050505050505050565b6000602080838503121561286e57600080fd5b82356001600160401b038082111561288557600080fd5b908401906040828703121561289957600080fd5b6128a1611b87565b8235828111156128b057600080fd5b6128bc888286016120ef565b82525083830135828111156128d057600080fd5b80840193505086601f8401126128e557600080fd5b82356128f3611cff82611c23565b81815260059190911b8401850190858101908983111561291257600080fd5b8686015b8381101561294a5780358681111561292e5760008081fd5b61293c8c8a838b010161216e565b845250918701918701612916565b5095830195909552509695505050505050565b600181811c9082168061297157607f821691505b6020821081141561299257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600081600f0b83600f0b600082128260016001607f1b03038213811516156129ee576129ee6129ae565b8260016001607f1b0319038212811615612a0a57612a0a6129ae565b50019392505050565b60006001600160801b03808316818516808303821115612a3557612a356129ae565b0194935050505056fea2646970667358221220cbb4b742e9d5b7365ce5b03a554cae0a308d71a3733ba78a8c8ce6eb1e1b9e3d64736f6c634300080b0033"};

    public static final String BINARY = org.fisco.bcos.sdk.v3.utils.StringUtils.joinAll("", BINARY_ARRAY);

    public static final String[] SM_BINARY_ARRAY = {"60806040523480156200001157600080fd5b5060405162002f8338038062002f83833981016040819052620000349162000329565b8051805182916004916200005091839160209091019062000076565b5060208281015180516200006b9260018501920190620000da565b5090505050620004f5565b828054828255906000526020600020908101928215620000c8579160200282015b82811115620000c85782518051620000b791849160209091019062000126565b509160200191906001019062000097565b50620000d6929150620001a2565b5090565b82805482825590600052602060002090810192821562000118579160200282015b8281111562000118578251825591602001919060010190620000fb565b50620000d6929150620001c3565b8280546200013490620004b8565b90600052602060002090601f01602090048101928262000158576000855562000118565b82601f106200017357805160ff191683800117855562000118565b8280016001018555821562000118579182018281111562000118578251825591602001919060010190620000fb565b80821115620000d6576000620001b98282620001da565b50600101620001a2565b5b80821115620000d65760008155600101620001c4565b508054620001e890620004b8565b6000825580601f10620001f9575050565b601f016020900490600052602060002090810190620002199190620001c3565b50565b63b95aa35560e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156200025757620002576200021c565b60405290565b604051601f8201601f191681016001600160401b03811182821017156200028857620002886200021c565b604052919050565b60006001600160401b03821115620002ac57620002ac6200021c565b5060051b60200190565b600082601f830112620002c857600080fd5b81516020620002e1620002db8362000290565b6200025d565b82815260059290921b840181019181810190868411156200030157600080fd5b8286015b848110156200031e578051835291830191830162000305565b509695505050505050565b600060208083850312156200033d57600080fd5b82516001600160401b03808211156200035557600080fd5b818501915060408083880312156200036c57600080fd5b6200037662000232565b8351838111156200038657600080fd5b8401601f810189136200039857600080fd5b8051620003a9620002db8262000290565b81815260059190911b8201870190878101908b831115620003c957600080fd5b8884015b838110156200047e57805188811115620003e75760008081fd5b8501603f81018e13620003fa5760008081fd5b8a810151898111156200041157620004116200021c565b62000425601f8201601f19168d016200025d565b8181528f8a8385010111156200043b5760008081fd5b60005b828110156200045b578381018b01518282018f01528d016200043e565b828111156200046d5760008e84840101525b5085525050918901918901620003cd565b508452505050838501519150828211156200049857600080fd5b620004a688838601620002b6565b85820152809550505050505092915050565b600181811c90821680620004cd57607f821691505b60208210811415620004ef5763b95aa35560e01b600052602260045260246000fd5b50919050565b612a7e80620005056000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063a2030f0811610097578063cf0eeb9211610066578063cf0eeb921461025d578063d1b032f91461027e578063d4da0d8c14610291578063f79a6b6a146102b157600080fd5b8063a2030f081461020f578063a312b5f114610224578063a3d819e314610237578063ca60819c1461024a57600080fd5b80634676de9a116100d35780634676de9a1461018e57806354cebc8d146101ae57806373a96cee146101cf57806388c15074146101ef57600080fd5b80631062ff361461010557806332c313081461012e57806336793c591461014e5780633a07f2131461016e575b600080fd5b610118610113366004611ba9565b6102c4565b6040516101259190611c2a565b60405180910390f35b61014161013c366004611dbc565b61044b565b6040516101259190611f12565b61016161015c366004611fa2565b61056d565b604051610125919061207b565b61018161017c36600461214a565b6105f6565b6040516101259190612228565b6101a161019c36600461228a565b61069b565b6040516101259190612326565b6101c16101bc366004612334565b6107ad565b604051908152602001610125565b6101e26101dd366004612334565b6107ea565b6040516101259190612356565b6102026101fd36600461245d565b6108a7565b60405161012591906125eb565b610217610a61565b6040516101259190612646565b610217610232366004612659565b610d58565b610202610245366004612695565b610f13565b6101e2610258366004612334565b611101565b61027061026b366004612659565b611145565b6040516101259291906126f8565b6101c161028c366004612334565b611256565b6102a461029f366004612745565b61128b565b6040516101259190612854565b6102176102bf3660046128ea565b6113b7565b60408051602080820183526001808352835160608181018652600f88900b82526001600160801b03878116948301859052958201859052948716600160801b9093029290921760069081559061031e906007908590611618565b50506040805160608082018352600f88900b82526001600160801b03871660208301528183018590528251600280825291810190935290925060009190816020015b6103686116b7565b815260200190600190039081610360579050506040805160608101825260068054600f81900b8352600160801b90046001600160801b031660208084019190915283519081018085529495509193909284019190600790600190826000855b825461010083900a900460030b81526020600783018190049384019360010360049093019290920291018084116103c75790505050505050815250508160008151811061041657610416612967565b6020026020010181905250818160018151811061043557610435612967565b6020908102919091010152925050505b92915050565b80516060906104619060029060208501906116db565b506002805480602002602001604051908101604052809291908181526020016000905b8282101561056257600084815260208120604080518082019091529160028086029092019190835b8282101561054f5783820180546104c29061297d565b80601f01602080910402602001604051908101604052809291908181526020018280546104ee9061297d565b801561053b5780601f106105105761010080835404028352916020019161053b565b820191906000526020600020905b81548152906001019060200180831161051e57829003601f168201915b5050505050815260200190600101906104ac565b5050505081526020019060010190610484565b505050509050919050565b8051606090610583906003906020850190611731565b506003805480602002602001604051908101604052809291908181526020016000905b828210156105625760008481526020902060408051808201918290529160028581029091019182845b8154815260200190600101908083116105cf575050505050815260200190600101906105a6565b805160609061060c906001906020850190611787565b506001805480602002602001604051908101604052809291908181526020016000905b828210156105625760008481526020908190208301805460408051828502810185019091528181529283018282801561068757602002820191906000526020600020905b815481526020019060010190808311610673575b50505050508152602001906001019061062f565b6106a36116b7565b6040518060600160405280836000015160016106bf91906129ce565b600f0b8152602001836020015160016106d89190612a1d565b6001600160801b0390811682526040808601516020938401528351928401518216600160801b02929091169190911760069081559082015161071e906007906001611618565b50506040805160608101825260068054600f81900b8352600160801b90046001600160801b031660208084019190915283519081018085529294509092840191600790600190826000855b825461010083900a900460030b81526020600783018190049384019360010360049093019290920291018084116107695790505b5050505050815250509050919050565b600182815481106107bd57600080fd5b9060005260206000200181815481106107d557600080fd5b90600052602060002001600091509150505481565b600282815481106107fa57600080fd5b9060005260206000209060020201816002811061081657600080fd5b018054909250610826915061297d565b80601f01602080910402602001604051908101604052809291908181526020018280546108529061297d565b801561089f5780601f106108745761010080835404028352916020019161089f565b820191906000526020600020905b81548152906001019060200180831161088257829003601f168201915b505050505081565b60408051808201909152606080825260208201526000826020015151116108cd57600080fd5b81602001516000815181106108e4576108e4612967565b60200260200101516004600082015181600001908051906020019061090a9291906117e0565b5060208281015180516109239260018501920190611839565b505060408051600480546060602082028401810185529383018181529294509092849291849160009085015b828210156109fb57838290600052602060002001805461096e9061297d565b80601f016020809104026020016040519081016040528092919081815260200182805461099a9061297d565b80156109e75780601f106109bc576101008083540402835291602001916109e7565b820191906000526020600020905b8154815290600101906020018083116109ca57829003601f168201915b50505050508152602001906001019061094f565b5050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561079d57602002820191906000526020600020905b815481526020019060010190808311610a3e575050505050815250509050919050565b604080516002808252606082810190935260009190816020015b6040805180820190915260608082526020820152815260200190600190039081610a7b579050506040805160048054606060208202840181018552938301818152949550919390928492849160009085015b82821015610b79578382906000526020600020018054610aec9061297d565b80601f0160208091040260200160","405190810160405280929190818152602001828054610b189061297d565b8015610b655780601f10610b3a57610100808354040283529160200191610b65565b820191906000526020600020905b815481529060010190602001808311610b4857829003601f168201915b505050505081526020019060010190610acd565b50505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015610bd057602002820191906000526020600020905b815481526020019060010190808311610bbc575b50505050508152505081600081518110610bec57610bec612967565b6020026020010181905250600460405180604001604052908160008201805480602002602001604051908101604052809291908181526020016000905b82821015610cd5578382906000526020600020018054610c489061297d565b80601f0160208091040260200160405190810160405280929190818152602001828054610c749061297d565b8015610cc15780601f10610c9657610100808354040283529160200191610cc1565b820191906000526020600020905b815481529060010190602001808311610ca457829003601f168201915b505050505081526020019060010190610c29565b50505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015610d2c57602002820191906000526020600020905b815481526020019060010190808311610d18575b50505050508152505081600181518110610d4857610d48612967565b6020908102919091010152919050565b604080516002808252606082810190935260009190816020015b6040805180820190915260608082526020820152815260200190600190039081610d72579050506040805160048054606060208202840181018552938301818152949550919390928492849160009085015b82821015610e70578382906000526020600020018054610de39061297d565b80601f0160208091040260200160405190810160405280929190818152602001828054610e0f9061297d565b8015610e5c5780601f10610e3157610100808354040283529160200191610e5c565b820191906000526020600020905b815481529060010190602001808311610e3f57829003601f168201915b505050505081526020019060010190610dc4565b50505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015610ec757602002820191906000526020600020905b815481526020019060010190808311610eb3575b50505050508152505081600081518110610ee357610ee3612967565b60200260200101819052508281600181518110610f0257610f02612967565b602090810291909101015292915050565b6040805180820182526060808252602082015281516001808252818401909352909160009190816020015b6060815260200190600190039081610f3e5790505090508381600081518110610f6957610f69612967565b602002602001018190525060405180604001604052808281526020018481525060046000820151816000019080519060200190610fa79291906117e0565b506020828101518051610fc09260018501920190611839565b505060408051600480546060602082028401810185529383018181529294509092849291849160009085015b8282101561109857838290600052602060002001805461100b9061297d565b80601f01602080910402602001604051908101604052809291908181526020018280546110379061297d565b80156110845780601f1061105957610100808354040283529160200191611084565b820191906000526020600020905b81548152906001019060200180831161106757829003601f168201915b505050505081526020019060010190610fec565b505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156110ef57602002820191906000526020600020905b8154815260200190600101908083116110db575b50505050508152505091505092915050565b6000828154811061111157600080fd5b90600052602060002001818154811061112957600080fd5b906000526020600020016000915091505080546108269061297d565b60408051808201909152606080825260208201526060611178604051806040016040528060608152602001606081525090565b8351805185916004916111929183916020909101906117e0565b5060208281015180516111ab9260018501920190611839565b50600291506111b79050565b6040519080825280602002602001820160405280156111fc57816020015b60408051808201909152606080825260208201528152602001906001900390816111d55790505b5060208201819052805185919060009061121857611218612967565b602002602001018190525083816020015160018151811061123b5761123b612967565b60200260200101819052508081602001519250925050915091565b6003828154811061126657600080fd5b9060005260206000209060020201816002811061128257600080fd5b01549150829050565b80516060906112a1906000906020850190611874565b506000805480602002602001604051908101604052809291908181526020016000905b8282101561056257838290600052602060002001805480602002602001604051908101604052809291908181526020016000905b828210156113a45783829060005260206000200180546113179061297d565b80601f01602080910402602001604051908101604052809291908181526020018280546113439061297d565b80156113905780601f1061136557610100808354040283529160200191611390565b820191906000526020600020905b81548152906001019060200180831161137357829003601f168201915b5050505050815260200190600101906112f8565b50505050815260200190600101906112c4565b604080516002808252606082810190935260009190816020015b60608152602001906001900390816113d157905050905084816000815181106113fc576113fc612967565b60200260200101819052506040518060400160405280828152602001858152506004600082015181600001908051906020019061143a9291906117e0565b5060208281015180516114539260018501920190611839565b5090505060008360ff166001600160401b0381111561147457611474611c78565b6040519080825280602002602001820160405280156114b957816020015b60408051808201909152606080825260208201528152602001906001900390816114925790505b506040805160048054606060208202840181018552938301818152949550919390928492849160009085015b828210156115915783829060005260206000200180546115049061297d565b80601f01602080910402602001604051908101604052809291908181526020018280546115309061297d565b801561157d5780601f106115525761010080835404028352916020019161157d565b820191906000526020600020905b81548152906001019060200180831161156057829003601f168201915b5050505050815260200190600101906114e5565b505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156115e857602002820191906000526020600020905b8154815260200190600101908083116115d4575b5050505050815250508160008151811061160457611604612967565b602090810291909101015295945050505050565b6001830191839082156116a75791602002820160005b8382111561167557835183826101000a81548163ffffffff021916908360030b63ffffffff160217905550926020019260040160208160030104928301926001030261162e565b80156116a55782816101000a81549063ffffffff0219169055600401602081600301049283019260010302611675565b505b506116b39291506118cd565b5090565b60408051606081018252600080825260208201529081016116d66118e2565b905290565b828054828255906000526020600020906002028101928215611725579160200282015b828111156117255782516117159083906002611900565b50916020019190600201906116fe565b506116b392915061194c565b82805482825590600052602060002090600202810192821561177b579160200282015b8281111561177b57825161176b9083906002611969565b5091602001919060020190611754565b506116b3929150611996565b8280548282559060005260206000209081019282156117d4579160200282015b828111156117d457825180516117c4918491602090910190611839565b50916020019190600101906117a7565b506116b39291506119b0565b82805482825590600052602060002090810192821561182d579160200282015b8281111561182d578251805161181d9184916020909101906119cd565b5091602001919060010190611800565b506116b3929150611a40565b8280548282559060005260206000209081019282156116a7579160200282015b828111156116a7578251825591602001919060010190611859565b8280548282559060005260206000209081019282156118c1579160200282015b828111156118c157825180516118b1918491602090910190611a5d565b5091602001919060010190611894565b506116b3929150611aaa565b5b808211156116b357600081556001016118ce565b60405180602001604052806001906020820280368337509192915050565b8260028101928215611940579160200282015b8281111561194057825180516119309184916020909101906119cd565b5091602001919060010190611913565b506116b3929150611ac7565b808211156116b35760006119608282611ae4565b5060020161194c565b82600281019282156116a757916020028201828111156116a7578251825591602001919060010190611859565b808211156116b35760008082556001820155600201611996565b808211156116b35760006119c48282611b02565b506001016119b0565b8280546119d99061297d565b90600052602060002090601f0160209004810192826119fb57600085556116a7565b82601f10611a1457805160ff19168380011785556116a7565b828001600101855582156116a757918201828111156116a7578251825591602001919060010190611859565b808211156116b3576000611a548282611b23565b50600101611a40565b828054828255906000526020600020908101928215611940579160200282015b828111156119405782518051611a9a9184916020909101906119cd565b5091602001919060010190611a7d565b808211156116b3576000611abe8282611b5d565b50600101611aaa565b808211156116b3576000611adb8282611b23565b50600101611ac7565b506000611af18282611b23565b50611b009060010160","00611b23565b565b5080546000825590600052602060002090810190611b2091906118cd565b50565b508054611b2f9061297d565b6000825580601f10611b3f575050565b601f016020900490600052602060002090810190611b2091906118cd565b5080546000825590600052602060002090810190611b209190611ac7565b8035600f81900b8114611b8d57600080fd5b919050565b80356001600160801b0381168114611b8d57600080fd5b60008060408385031215611bbc57600080fd5b611bc583611b7b565b9150611bd360208401611b92565b90509250929050565b8051600f0b825260206001600160801b0381830151168184015260408201516040840160005b6001811015611c2257825160030b82529183019190830190600101611c02565b505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c6c57611c59838551611bdc565b9284019260609290920191600101611c46565b50909695505050505050565b63b95aa35560e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715611cb057611cb0611c78565b60405290565b604080519081016001600160401b0381118282101715611cb057611cb0611c78565b604051602081016001600160401b0381118282101715611cb057611cb0611c78565b604051601f8201601f191681016001600160401b0381118282101715611d2257611d22611c78565b604052919050565b60006001600160401b03821115611d4357611d43611c78565b5060051b60200190565b600082601f830112611d5e57600080fd5b81356001600160401b03811115611d7757611d77611c78565b611d8a601f8201601f1916602001611cfa565b818152846020838601011115611d9f57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215611dcf57600080fd5b6001600160401b038084351115611de557600080fd5b8335840185601f820112611df857600080fd5b8035611e0b611e0682611d2a565b611cfa565b81815260059190911b82018401908481019088831115611e2a57600080fd5b8584015b83811015611eb8578581351115611e4457600080fd5b803585018a603f820112611e5757600080fd5b611e5f611cb6565b80606083018d811115611e7157600080fd5b8a84015b81811015611ea7578a81351115611e8b57600080fd5b611e9a8f8d8335880101611d4d565b8452928b01928b01611e75565b505085525050918601918601611e2e565b5098975050505050505050565b6000815180845260005b81811015611eeb57602081850181015186830182015201611ecf565b81811115611efd576000602083870101525b50601f01601f19169290920160200192915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b84811015611f9357898403603f19018652825184888101845b6002811015611f7e578782038352611f6c828551611ec5565b938c0193928c01929150600101611f53565b50978a01979550505091870191600101611f3a565b50919998505050505050505050565b60006020808385031215611fb557600080fd5b82356001600160401b03811115611fcb57600080fd5b8301601f8082018613611fdd57600080fd5b8135611feb611e0682611d2a565b81815260069190911b8301840190848101908883111561200a57600080fd5b938501935b8285101561206f5788848601126120265760008081fd5b61202e611cb6565b80604087018b8111156120415760008081fd5b875b8181101561205a5780358452928901928901612043565b5050835250604094909401939085019061200f565b98975050505050505050565b60208082528251828201819052600091906040908185019086840185805b838110156120d657825185835b60028110156120c3578251825291890191908901906001016120a6565b5050509385019391860191600101612099565b509298975050505050505050565b600082601f8301126120f557600080fd5b81356020612105611e0683611d2a565b82815260059290921b8401810191818101908684111561212457600080fd5b8286015b8481101561213f5780358352918301918301612128565b509695505050505050565b6000602080838503121561215d57600080fd5b82356001600160401b038082111561217457600080fd5b818501915085601f83011261218857600080fd5b8135612196611e0682611d2a565b81815260059190911b830184019084810190888311156121b557600080fd5b8585015b83811015611eb8578035858111156121d15760008081fd5b6121df8b89838a01016120e4565b8452509186019186016121b9565b600081518084526020808501945080840160005b8381101561221d57815187529582019590820190600101612201565b509495945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561227d57603f1988860301845261226b8583516121ed565b9450928501929085019060010161224f565b5092979650505050505050565b60006060828403121561229c57600080fd5b6122a4611c8e565b6122ad83611b7b565b815260206122bc818501611b92565b8183015284605f8501126122cf57600080fd5b6122d7611cd8565b8060608601878111156122e957600080fd5b604087015b818110156123155780358060030b81146123085760008081fd5b84529284019284016122ee565b505060408401525090949350505050565b606081016104458284611bdc565b6000806040838503121561234757600080fd5b50508035926020909101359150565b6020815260006123696020830184611ec5565b9392505050565b600082601f83011261238157600080fd5b81356020612391611e0683611d2a565b82815260059290921b840181019181810190868411156123b057600080fd5b8286015b8481101561213f5780356001600160401b038111156123d35760008081fd5b6123e18986838b0101611d4d565b8452509183019183016123b4565b60006040828403121561240157600080fd5b612409611cb6565b905081356001600160401b038082111561242257600080fd5b61242e85838601612370565b8352602084013591508082111561244457600080fd5b50612451848285016120e4565b60208301525092915050565b6000602080838503121561247057600080fd5b82356001600160401b038082111561248757600080fd5b908401906040828703121561249b57600080fd5b6124a3611cb6565b8235828111156124b257600080fd5b6124be88828601612370565b82525083830135828111156124d257600080fd5b80840193505086601f8401126124e757600080fd5b82356124f5611e0682611d2a565b81815260059190911b8401850190858101908983111561251457600080fd5b8686015b8381101561254c578035868111156125305760008081fd5b61253e8c8a838b01016123ef565b845250918701918701612518565b5095830195909552509695505050505050565b600081518084526020808501808196508360051b8101915082860160005b858110156125a7578284038952612595848351611ec5565b9885019893509084019060010161257d565b5091979650505050505050565b60008151604084526125c9604085018261255f565b9050602083015184820360208601526125e282826121ed565b95945050505050565b60208152600061236960208301846125b4565b600081518084526020808501808196508360051b8101915082860160005b858110156125a75782840389526126348483516125b4565b9885019893509084019060010161261c565b60208152600061236960208301846125fe565b60006020828403121561266b57600080fd5b81356001600160401b0381111561268157600080fd5b61268d848285016123ef565b949350505050565b600080604083850312156126a857600080fd5b82356001600160401b03808211156126bf57600080fd5b6126cb86838701611d4d565b935060208501359150808211156126e157600080fd5b506126ee858286016120e4565b9150509250929050565b6040815260008351604080840152612713608084018261255f565b90506020850151603f1984830301606085015261273082826125fe565b91505082810360208401526125e281856125fe565b6000602080838503121561275857600080fd5b6001600160401b03808435111561276e57600080fd5b8335840185601f82011261278157600080fd5b803561278f611e0682611d2a565b81815260059190911b820184019084810190888311156127ae57600080fd5b8584015b83811015611eb85785813511156127c857600080fd5b803585018a603f8201126127db57600080fd5b878101356127eb611e0682611d2a565b81815260059190911b820160400190898101908d83111561280b57600080fd5b604084015b83811015612843578a8135111561282657600080fd5b6128368f60408335880101611d4d565b8352918b01918b01612810565b5086525050509186019186016127b2565b6000602080830181845280855180835260408601915060059250604081841b8701018488016000805b84811015611f9357898403603f19018652825180518086529089019089860190808a1b87018b01855b828110156128d457601f198983030184526128c2828651611ec5565b948d0194938d019391506001016128a6565b50988b019896505050928801925060010161287d565b6000806000606084860312156128ff57600080fd5b83356001600160401b038082111561291657600080fd5b61292287838801611d4d565b9450602086013591508082111561293857600080fd5b50612945868287016120e4565b925050604084013560ff8116811461295c57600080fd5b809150509250925092565b63b95aa35560e01b600052603260045260246000fd5b600181811c9082168061299157607f821691505b602082108114156129b25763b95aa35560e01b600052602260045260246000fd5b50919050565b63b95aa35560e01b600052601160045260246000fd5b600081600f0b83600f0b600082128260016001607f1b03038213811516156129f8576129f86129b8565b8260016001607f1b0319038212811615612a1457612a146129b8565b50019392505050565b60006001600160801b03808316818516808303821115612a3f57612a3f6129b8565b0194935050505056fea26469706673582212201466f6713a2501bd1383248e08f74a427b97bf1f6b89f6509b5e080047c75f2464736f6c634300080b0033"};

    public static final String SM_BINARY = org.fisco.bcos.sdk.v3.utils.StringUtils.joinAll("", SM_BINARY_ARRAY);

    public static final String[] ABI_ARRAY = {"[{\"inputs\":[{\"components\":[{\"internalType\":\"string[]\",\"name\":\"value_str\",\"type\":\"string[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"bytes32_in_struct\",\"type\":\"bytes32[]\"}],\"internalType\":\"struct StructA\",\"name\":\"a\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"b32_array_array\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"b32_s_array_array\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"b_array_array\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"b_s_array_array\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"int128\",\"name\":\"i1\",\"type\":\"int128\"},{\"internalType\":\"uint128\",\"name\":\"u1\",\"type\":\"uint128\"},{\"internalType\":\"int32[1]\",\"name\":\"b1\",\"type\":\"int32[1]\"}],\"internalType\":\"struct StaticStruct\",\"name\":\"b\",\"type\":\"tuple\"}],\"name\":\"buildStaticStruct\",\"outputs\":[{\"components\":[{\"internalType\":\"int128\",\"name\":\"i1\",\"type\":\"int128\"},{\"internalType\":\"uint128\",\"name\":\"u1\",\"type\":\"uint128\"},{\"internalType\":\"int32[1]\",\"name\":\"b1\",\"type\":\"int32[1]\"}],\"internalType\":\"struct StaticStruct\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int128\",\"name\":\"i1\",\"type\":\"int128\"},{\"internalType\":\"uint128\",\"name\":\"u1\",\"type\":\"uint128\"}],\"name\":\"buildStaticStruct\",\"outputs\":[{\"components\":[{\"internalType\":\"int128\",\"name\":\"i1\",\"type\":\"int128\"},{\"internalType\":\"uint128\",\"name\":\"u1\",\"type\":\"uint128\"},{\"internalType\":\"int32[1]\",\"name\":\"b1\",\"type\":\"int32[1]\"}],\"internalType\":\"struct StaticStruct[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"value_str\",\"type\":\"string\"},{\"internalType\":\"bytes32[]\",\"name\":\"_b\",\"type\":\"bytes32[]\"}],\"name\":\"buildStructA\",\"outputs\":[{\"components\":[{\"internalType\":\"string[]\",\"name\":\"value_str\",\"type\":\"string[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"bytes32_in_struct\",\"type\":\"bytes32[]\"}],\"internalType\":\"struct StructA\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"value_str\",\"type\":\"string\"},{\"internalType\":\"bytes32[]\",\"name\":\"_b\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint8\",\"name\":\"size\",\"type\":\"uint8\"}],\"name\":\"buildStructA\",\"outputs\":[{\"components\":[{\"internalType\":\"string[]\",\"name\":\"value_str\",\"type\":\"string[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"bytes32_in_struct\",\"type\":\"bytes32[]\"}],\"internalType\":\"struct StructA[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"string[]\",\"name\":\"value_str\",\"type\":\"string[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"bytes32_in_struct\",\"type\":\"bytes32[]\"}],\"internalType\":\"struct StructA\",\"name\":\"a\",\"type\":\"tuple\"}],\"name\":\"buildStructB\",\"outputs\":[{\"components\":[{\"internalType\":\"string[]\",\"name\":\"d_str\",\"type\":\"string[]\"},{\"components\":[{\"internalType\":\"string[]\",\"name\":\"value_str\",\"type\":\"string[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"bytes32_in_struct\",\"type\":\"bytes32[]\"}],\"internalType\":\"struct StructA[]\",\"name\":\"a_struct\",\"type\":\"tuple[]\"}],\"internalType\":\"struct StructB\",\"name\":\"\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"string[]\",\"name\":\"value_str\",\"type\":\"string[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"bytes32_in_struct\",\"type\":\"bytes32[]\"}],\"internalType\":\"struct StructA[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStructA\",\"outputs\":[{\"components\":[{\"internalType\":\"string[]\",\"name\":\"value_str\",\"type\":\"string[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"bytes32_in_struct\",\"type\":\"bytes32[]\"}],\"internalType\":\"struct StructA[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"string[]\",\"name\":\"value_str\",\"type\":\"string[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"bytes32_in_struct\",\"type\":\"bytes32[]\"}],\"internalType\":\"struct StructA\",\"name\":\"a\",\"type\":\"tuple\"}],\"name\":\"getStructA\",\"outputs\":[{\"components\":[{\"internalType\":\"string[]\",\"name\":\"value_str\",\"type\":\"string[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"bytes32_in_struct\",\"type\":\"bytes32[]\"}],\"internalType\":\"struct StructA[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"string[]\",\"name\":\"d_str\",\"type\":\"string[]\"},{\"components\":[{\"internalType\":\"string[]\",\"name\":\"value_str\",\"type\":\"string[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"bytes32_in_struct\",\"type\":\"bytes32[]\"}],\"internalType\":\"struct StructA[]\",\"name\":\"a_struct\",\"type\":\"tuple[]\"}],\"internalType\":\"struct StructB\",\"name\":\"b\",\"type\":\"tuple\"}],\"name\":\"getStructAInStructB\",\"outputs\":[{\"components\":[{\"internalType\":\"string[]\",\"name\":\"value_str\",\"type\":\"string[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"bytes32_in_struct\",\"type\":\"bytes32[]\"}],\"internalType\":\"struct StructA\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[][]\",\"name\":\"b\",\"type\":\"bytes32[][]\"}],\"name\":\"setBytes32ArrayArray\",\"outputs\":[{\"internalType\":\"bytes32[][]\",\"name\":\"\",\"type\":\"bytes32[][]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[2][]\",\"name\":\"b\",\"type\":\"bytes32[2][]\"}],\"name\":\"setBytes32StaticArrayArray\",\"outputs\":[{\"internalType\":\"bytes32[2][]\",\"name\":\"\",\"type\":\"bytes32[2][]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[][]\",\"name\":\"b\",\"type\":\"bytes[][]\"}],\"name\":\"setBytesArrayArray\",\"outputs\":[{\"internalType\":\"bytes[][]\",\"name\":\"\",\"type\":\"bytes[][]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[2][]\",\"name\":\"b\",\"type\":\"bytes[2][]\"}],\"name\":\"setBytesStaticArrayArray\",\"outputs\":[{\"internalType\":\"bytes[2][]\",\"name\":\"\",\"type\":\"bytes[2][]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]"};

    public static final String ABI = org.fisco.bcos.sdk.v3.utils.StringUtils.joinAll("", ABI_ARRAY);

    public static final String FUNC_B32_ARRAY_ARRAY = "b32_array_array";

    public static final String FUNC_B32_S_ARRAY_ARRAY = "b32_s_array_array";

    public static final String FUNC_B_ARRAY_ARRAY = "b_array_array";

    public static final String FUNC_B_S_ARRAY_ARRAY = "b_s_array_array";

    public static final String FUNC_BUILDSTATICSTRUCT = "buildStaticStruct";

    public static final String FUNC_BUILDSTRUCTA = "buildStructA";

    public static final String FUNC_BUILDSTRUCTB = "buildStructB";

    public static final String FUNC_GETSTRUCTA = "getStructA";

    public static final String FUNC_GETSTRUCTAINSTRUCTB = "getStructAInStructB";

    public static final String FUNC_SETBYTES32ARRAYARRAY = "setBytes32ArrayArray";

    public static final String FUNC_SETBYTES32STATICARRAYARRAY = "setBytes32StaticArrayArray";

    public static final String FUNC_SETBYTESARRAYARRAY = "setBytesArrayArray";

    public static final String FUNC_SETBYTESSTATICARRAYARRAY = "setBytesStaticArrayArray";

    protected ComplexCodecTest(String contractAddress, Client client, CryptoKeyPair credential) {
        super(getBinary(client.getCryptoSuite()), contractAddress, client, credential);
        this.transactionManager = new ProxySignTransactionManager(client);
    }

    protected ComplexCodecTest(String contractAddress, Client client,
            TransactionManager transactionManager) {
        super(getBinary(client.getCryptoSuite()), contractAddress, client, transactionManager);
    }

    public static String getBinary(CryptoSuite cryptoSuite) {
        return (cryptoSuite.getCryptoTypeConfig() == CryptoType.ECDSA_TYPE ? BINARY : SM_BINARY);
    }

    public static String getABI() {
        return ABI;
    }

    public byte[] b32_array_array(BigInteger param0, BigInteger param1) throws ContractException {
        final Function function = new Function(FUNC_B32_ARRAY_ARRAY, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(param0), 
                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(param1)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Bytes32>() {}));
        return executeCallWithSingleValueReturn(function, byte[].class);
    }

    public Function getMethodB32_array_arrayRawFunction(BigInteger param0, BigInteger param1) throws
            ContractException {
        final Function function = new Function(FUNC_B32_ARRAY_ARRAY, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(param0), 
                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(param1)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Bytes32>() {}));
        return function;
    }

    public byte[] b32_s_array_array(BigInteger param0, BigInteger param1) throws ContractException {
        final Function function = new Function(FUNC_B32_S_ARRAY_ARRAY, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(param0), 
                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(param1)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Bytes32>() {}));
        return executeCallWithSingleValueReturn(function, byte[].class);
    }

    public Function getMethodB32_s_array_arrayRawFunction(BigInteger param0, BigInteger param1)
            throws ContractException {
        final Function function = new Function(FUNC_B32_S_ARRAY_ARRAY, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(param0), 
                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(param1)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Bytes32>() {}));
        return function;
    }

    public byte[] b_array_array(BigInteger param0, BigInteger param1) throws ContractException {
        final Function function = new Function(FUNC_B_ARRAY_ARRAY, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(param0), 
                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(param1)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
        return executeCallWithSingleValueReturn(function, byte[].class);
    }

    public Function getMethodB_array_arrayRawFunction(BigInteger param0, BigInteger param1) throws
            ContractException {
        final Function function = new Function(FUNC_B_ARRAY_ARRAY, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(param0), 
                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(param1)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
        return function;
    }

    public byte[] b_s_array_array(BigInteger param0, BigInteger param1) throws ContractException {
        final Function function = new Function(FUNC_B_S_ARRAY_ARRAY, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(param0), 
                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(param1)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
        return executeCallWithSingleValueReturn(function, byte[].class);
    }

    public Function getMethodB_s_array_arrayRawFunction(BigInteger param0, BigInteger param1) throws
            ContractException {
        final Function function = new Function(FUNC_B_S_ARRAY_ARRAY, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(param0), 
                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(param1)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
        return function;
    }

    public TransactionReceipt buildStaticStruct(StaticStruct b) {
        final Function function = new Function(
                FUNC_BUILDSTATICSTRUCT, 
                Arrays.<Type>asList(b), 
                Collections.<TypeReference<?>>emptyList(), 0);
        return executeTransaction(function);
    }

    public Function getMethodBuildStaticStructRawFunction(StaticStruct b) throws ContractException {
        final Function function = new Function(FUNC_BUILDSTATICSTRUCT, 
                Arrays.<Type>asList(b), 
                Arrays.<TypeReference<?>>asList(new TypeReference<StaticStruct>() {}));
        return function;
    }

    public String getSignedTransactionForBuildStaticStruct(StaticStruct b) {
        final Function function = new Function(
                FUNC_BUILDSTATICSTRUCT, 
                Arrays.<Type>asList(b), 
                Collections.<TypeReference<?>>emptyList(), 0);
        return createSignedTransaction(function);
    }

    public String buildStaticStruct(StaticStruct b, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_BUILDSTATICSTRUCT, 
                Arrays.<Type>asList(b), 
                Collections.<TypeReference<?>>emptyList(), 0);
        return asyncExecuteTransaction(function, callback);
    }

    public Tuple1<StaticStruct> getBuildStaticStructTupleInput(
            TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_BUILDSTATICSTRUCT, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<StaticStruct>() {}));
        List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<StaticStruct>(

                (StaticStruct) results.get(0)
                );
    }

    public Tuple1<StaticStruct> getBuildStaticStructTupleOutput(
            TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_BUILDSTATICSTRUCT, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<StaticStruct>() {}));
        List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<StaticStruct>(

                (StaticStruct) results.get(0)
                );
    }

    public TransactionReceipt buildStaticStruct(BigInteger i1, BigInteger u1) {
        final Function function = new Function(
                FUNC_BUILDSTATICSTRUCT, 
                Arrays.<Type>asList(new Int128(i1),
                new Uint128(u1)),
                Collections.<TypeReference<?>>emptyList(), 0);
        return executeTransaction(function);
    }

    public Function getMethodBuildStaticStructRawFunction(BigInteger i1, BigInteger u1) throws
            ContractException {
        final Function function = new Function(FUNC_BUILDSTATICSTRUCT, 
                Arrays.<Type>asList(new Int128(i1),
                new Uint128(u1)),
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<StaticStruct>>() {}));
        return function;
    }

    public String getSignedTransactionForBuildStaticStruct(BigInteger i1, BigInteger u1) {
        final Function function = new Function(
                FUNC_BUILDSTATICSTRUCT, 
                Arrays.<Type>asList(new Int128(i1),
                new Uint128(u1)),
                Collections.<TypeReference<?>>emptyList(), 0);
        return createSignedTransaction(function);
    }

    public String buildStaticStruct(BigInteger i1, BigInteger u1, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_BUILDSTATICSTRUCT, 
                Arrays.<Type>asList(new Int128(i1),
                new Uint128(u1)),
                Collections.<TypeReference<?>>emptyList(), 0);
        return asyncExecuteTransaction(function, callback);
    }

    public Tuple2<BigInteger, BigInteger> getBuildStaticStructInt128Uint128Input(
            TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_BUILDSTATICSTRUCT, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Int128>() {}, new TypeReference<Uint128>() {}));
        List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<BigInteger, BigInteger>(

                (BigInteger) results.get(0).getValue(), 
                (BigInteger) results.get(1).getValue()
                );
    }

    public Tuple1<DynamicArray<StaticStruct>> getBuildStaticStructInt128Uint128Output(
            TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_BUILDSTATICSTRUCT, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<StaticStruct>>() {}));
        List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<DynamicArray<StaticStruct>>(

                new DynamicArray<>(StaticStruct.class,(List<StaticStruct>) results.get(0).getValue())
                );
    }

    public TransactionReceipt buildStructA(String value_str, List<byte[]> _b) {
        final Function function = new Function(
                FUNC_BUILDSTRUCTA, 
                Arrays.<Type>asList(new Utf8String(value_str),
                new DynamicArray<Bytes32>(
                        Bytes32.class,
                        org.fisco.bcos.sdk.v3.codec.Utils.typeMap(_b, Bytes32.class))),
                Collections.<TypeReference<?>>emptyList(), 0);
        return executeTransaction(function);
    }

    public Function getMethodBuildStructARawFunction(String value_str, List<byte[]> _b) throws
            ContractException {
        final Function function = new Function(FUNC_BUILDSTRUCTA, 
                Arrays.<Type>asList(new Utf8String(value_str),
                new DynamicArray<Bytes32>(
                        Bytes32.class,
                        org.fisco.bcos.sdk.v3.codec.Utils.typeMap(_b, Bytes32.class))),
                Arrays.<TypeReference<?>>asList(new TypeReference<StructA>() {}));
        return function;
    }

    public String getSignedTransactionForBuildStructA(String value_str, List<byte[]> _b) {
        final Function function = new Function(
                FUNC_BUILDSTRUCTA, 
                Arrays.<Type>asList(new Utf8String(value_str),
                new DynamicArray<Bytes32>(
                        Bytes32.class,
                        org.fisco.bcos.sdk.v3.codec.Utils.typeMap(_b, Bytes32.class))),
                Collections.<TypeReference<?>>emptyList(), 0);
        return createSignedTransaction(function);
    }

    public String buildStructA(String value_str, List<byte[]> _b, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_BUILDSTRUCTA, 
                Arrays.<Type>asList(new Utf8String(value_str),
                new DynamicArray<Bytes32>(
                        Bytes32.class,
                        org.fisco.bcos.sdk.v3.codec.Utils.typeMap(_b, Bytes32.class))),
                Collections.<TypeReference<?>>emptyList(), 0);
        return asyncExecuteTransaction(function, callback);
    }

    public Tuple2<String, List<byte[]>> getBuildStructAStringBytes32bytes32Input(
            TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_BUILDSTRUCTA, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<DynamicArray<Bytes32>>() {}));
        List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<String, List<byte[]>>(

                (String) results.get(0).getValue(), 
                convertToNative((List<Bytes32>) results.get(1).getValue())
                );
    }

    public Tuple1<StructA> getBuildStructAStringBytes32bytes32Output(
            TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_BUILDSTRUCTA, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<StructA>() {}));
        List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<StructA>(

                (StructA) results.get(0)
                );
    }

    public TransactionReceipt buildStructA(String value_str, List<byte[]> _b, BigInteger size) {
        final Function function = new Function(
                FUNC_BUILDSTRUCTA, 
                Arrays.<Type>asList(new Utf8String(value_str),
                new DynamicArray<Bytes32>(
                        Bytes32.class,
                        org.fisco.bcos.sdk.v3.codec.Utils.typeMap(_b, Bytes32.class)),
                new Uint8(size)),
                Collections.<TypeReference<?>>emptyList(), 0);
        return executeTransaction(function);
    }

    public Function getMethodBuildStructARawFunction(String value_str, List<byte[]> _b,
            BigInteger size) throws ContractException {
        final Function function = new Function(FUNC_BUILDSTRUCTA, 
                Arrays.<Type>asList(new Utf8String(value_str),
                new DynamicArray<Bytes32>(
                        Bytes32.class,
                        org.fisco.bcos.sdk.v3.codec.Utils.typeMap(_b, Bytes32.class)),
                new Uint8(size)),
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<StructA>>() {}));
        return function;
    }

    public String getSignedTransactionForBuildStructA(String value_str, List<byte[]> _b,
            BigInteger size) {
        final Function function = new Function(
                FUNC_BUILDSTRUCTA, 
                Arrays.<Type>asList(new Utf8String(value_str),
                new DynamicArray<Bytes32>(
                        Bytes32.class,
                        org.fisco.bcos.sdk.v3.codec.Utils.typeMap(_b, Bytes32.class)),
                new Uint8(size)),
                Collections.<TypeReference<?>>emptyList(), 0);
        return createSignedTransaction(function);
    }

    public String buildStructA(String value_str, List<byte[]> _b, BigInteger size,
            TransactionCallback callback) {
        final Function function = new Function(
                FUNC_BUILDSTRUCTA, 
                Arrays.<Type>asList(new Utf8String(value_str),
                new DynamicArray<Bytes32>(
                        Bytes32.class,
                        org.fisco.bcos.sdk.v3.codec.Utils.typeMap(_b, Bytes32.class)),
                new Uint8(size)),
                Collections.<TypeReference<?>>emptyList(), 0);
        return asyncExecuteTransaction(function, callback);
    }

    public Tuple3<String, List<byte[]>, BigInteger> getBuildStructAStringBytes32bytes32Uint8Input(
            TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_BUILDSTRUCTA, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<DynamicArray<Bytes32>>() {}, new TypeReference<Uint8>() {}));
        List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple3<String, List<byte[]>, BigInteger>(

                (String) results.get(0).getValue(), 
                convertToNative((List<Bytes32>) results.get(1).getValue()), 
                (BigInteger) results.get(2).getValue()
                );
    }

    public Tuple1<DynamicArray<StructA>> getBuildStructAStringBytes32bytes32Uint8Output(
            TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_BUILDSTRUCTA, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<StructA>>() {}));
        List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<DynamicArray<StructA>>(

                new DynamicArray<>(StructA.class,(List<StructA>) results.get(0).getValue())
                );
    }

    public TransactionReceipt buildStructB(StructA a) {
        final Function function = new Function(
                FUNC_BUILDSTRUCTB, 
                Arrays.<Type>asList(a), 
                Collections.<TypeReference<?>>emptyList(), 0);
        return executeTransaction(function);
    }

    public Function getMethodBuildStructBRawFunction(StructA a) throws ContractException {
        final Function function = new Function(FUNC_BUILDSTRUCTB, 
                Arrays.<Type>asList(a), 
                Arrays.<TypeReference<?>>asList(new TypeReference<StructB>() {}, new TypeReference<DynamicArray<StructA>>() {}));
        return function;
    }

    public String getSignedTransactionForBuildStructB(StructA a) {
        final Function function = new Function(
                FUNC_BUILDSTRUCTB, 
                Arrays.<Type>asList(a), 
                Collections.<TypeReference<?>>emptyList(), 0);
        return createSignedTransaction(function);
    }

    public String buildStructB(StructA a, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_BUILDSTRUCTB, 
                Arrays.<Type>asList(a), 
                Collections.<TypeReference<?>>emptyList(), 0);
        return asyncExecuteTransaction(function, callback);
    }

    public Tuple1<StructA> getBuildStructBInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_BUILDSTRUCTB, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<StructA>() {}));
        List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<StructA>(

                (StructA) results.get(0)
                );
    }

    public Tuple2<StructB, DynamicArray<StructA>> getBuildStructBOutput(
            TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_BUILDSTRUCTB, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<StructB>() {}, new TypeReference<DynamicArray<StructA>>() {}));
        List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<StructB, DynamicArray<StructA>>(

                (StructB) results.get(0), 
                new DynamicArray<>(StructA.class,(List<StructA>) results.get(1).getValue())
                );
    }

    public List<StructA> getStructA() throws ContractException {
        final Function function = new Function(FUNC_GETSTRUCTA, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<StructA>>() {}));
        return executeCallWithSingleValueReturn(function, List.class);
    }

    public Function getMethodGetStructARawFunction() throws ContractException {
        final Function function = new Function(FUNC_GETSTRUCTA, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<StructA>>() {}));
        return function;
    }

    public List<StructA> getStructA(StructA a) throws ContractException {
        final Function function = new Function(FUNC_GETSTRUCTA, 
                Arrays.<Type>asList(a), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<StructA>>() {}));
        return executeCallWithSingleValueReturn(function, List.class);
    }

    public Function getMethodGetStructARawFunction(StructA a) throws ContractException {
        final Function function = new Function(FUNC_GETSTRUCTA, 
                Arrays.<Type>asList(a), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<StructA>>() {}));
        return function;
    }

    public TransactionReceipt getStructAInStructB(StructB b) {
        final Function function = new Function(
                FUNC_GETSTRUCTAINSTRUCTB, 
                Arrays.<Type>asList(b), 
                Collections.<TypeReference<?>>emptyList(), 0);
        return executeTransaction(function);
    }

    public Function getMethodGetStructAInStructBRawFunction(StructB b) throws ContractException {
        final Function function = new Function(FUNC_GETSTRUCTAINSTRUCTB, 
                Arrays.<Type>asList(b), 
                Arrays.<TypeReference<?>>asList(new TypeReference<StructA>() {}));
        return function;
    }

    public String getSignedTransactionForGetStructAInStructB(StructB b) {
        final Function function = new Function(
                FUNC_GETSTRUCTAINSTRUCTB, 
                Arrays.<Type>asList(b), 
                Collections.<TypeReference<?>>emptyList(), 0);
        return createSignedTransaction(function);
    }

    public String getStructAInStructB(StructB b, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_GETSTRUCTAINSTRUCTB, 
                Arrays.<Type>asList(b), 
                Collections.<TypeReference<?>>emptyList(), 0);
        return asyncExecuteTransaction(function, callback);
    }

    public Tuple1<StructB> getGetStructAInStructBInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_GETSTRUCTAINSTRUCTB, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<StructB>() {}));
        List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<StructB>(

                (StructB) results.get(0)
                );
    }

    public Tuple1<StructA> getGetStructAInStructBOutput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_GETSTRUCTAINSTRUCTB, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<StructA>() {}));
        List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<StructA>(

                (StructA) results.get(0)
                );
    }

    public TransactionReceipt setBytes32ArrayArray(List<List<byte[]>> b) {
        final Function function = new Function(
                FUNC_SETBYTES32ARRAYARRAY, 
                Arrays.<Type>asList(new DynamicArray<DynamicArray>(
                        DynamicArray.class,
                        org.fisco.bcos.sdk.v3.codec.Utils.typeMap(b, DynamicArray.class,
                Bytes32.class))),
                Collections.<TypeReference<?>>emptyList(), 0);
        return executeTransaction(function);
    }

    public Function getMethodSetBytes32ArrayArrayRawFunction(List<List<byte[]>> b) throws
            ContractException {
        final Function function = new Function(FUNC_SETBYTES32ARRAYARRAY, 
                Arrays.<Type>asList(new DynamicArray<DynamicArray>(
                        DynamicArray.class,
                        org.fisco.bcos.sdk.v3.codec.Utils.typeMap(b, DynamicArray.class,
                Bytes32.class))),
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<DynamicArray<Bytes32>>>() {}));
        return function;
    }

    public String getSignedTransactionForSetBytes32ArrayArray(List<List<byte[]>> b) {
        final Function function = new Function(
                FUNC_SETBYTES32ARRAYARRAY, 
                Arrays.<Type>asList(new DynamicArray<DynamicArray>(
                        DynamicArray.class,
                        org.fisco.bcos.sdk.v3.codec.Utils.typeMap(b, DynamicArray.class,
                Bytes32.class))),
                Collections.<TypeReference<?>>emptyList(), 0);
        return createSignedTransaction(function);
    }

    public String setBytes32ArrayArray(List<List<byte[]>> b, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_SETBYTES32ARRAYARRAY, 
                Arrays.<Type>asList(new DynamicArray<DynamicArray>(
                        DynamicArray.class,
                        org.fisco.bcos.sdk.v3.codec.Utils.typeMap(b, DynamicArray.class,
                Bytes32.class))),
                Collections.<TypeReference<?>>emptyList(), 0);
        return asyncExecuteTransaction(function, callback);
    }

    public Tuple1<List<List<byte[]>>> getSetBytes32ArrayArrayInput(
            TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_SETBYTES32ARRAYARRAY, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<DynamicArray<Bytes32>>>() {}));
        List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<List<List<byte[]>>>(

                convertToNative((List<DynamicArray<Bytes32>>) results.get(0).getValue())
                );
    }

    public Tuple1<List<List<byte[]>>> getSetBytes32ArrayArrayOutput(
            TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_SETBYTES32ARRAYARRAY, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<DynamicArray<Bytes32>>>() {}));
        List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<List<List<byte[]>>>(

                convertToNative((List<DynamicArray<Bytes32>>) results.get(0).getValue())
                );
    }

    public TransactionReceipt setBytes32StaticArrayArray(List<List<byte[]>> b) {
        final Function function = new Function(
                FUNC_SETBYTES32STATICARRAYARRAY, 
                Arrays.<Type>asList(new DynamicArray<StaticArray2>(
                        StaticArray2.class,
                        org.fisco.bcos.sdk.v3.codec.Utils.typeMap(b, StaticArray2.class,
                Bytes32.class))),
                Collections.<TypeReference<?>>emptyList(), 0);
        return executeTransaction(function);
    }

    public Function getMethodSetBytes32StaticArrayArrayRawFunction(List<List<byte[]>> b) throws
            ContractException {
        final Function function = new Function(FUNC_SETBYTES32STATICARRAYARRAY, 
                Arrays.<Type>asList(new DynamicArray<StaticArray2>(
                        StaticArray2.class,
                        org.fisco.bcos.sdk.v3.codec.Utils.typeMap(b, StaticArray2.class,
                Bytes32.class))),
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<StaticArray2<Bytes32>>>() {}));
        return function;
    }

    public String getSignedTransactionForSetBytes32StaticArrayArray(List<List<byte[]>> b) {
        final Function function = new Function(
                FUNC_SETBYTES32STATICARRAYARRAY, 
                Arrays.<Type>asList(new DynamicArray<StaticArray2>(
                        StaticArray2.class,
                        org.fisco.bcos.sdk.v3.codec.Utils.typeMap(b, StaticArray2.class,
                Bytes32.class))),
                Collections.<TypeReference<?>>emptyList(), 0);
        return createSignedTransaction(function);
    }

    public String setBytes32StaticArrayArray(List<List<byte[]>> b, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_SETBYTES32STATICARRAYARRAY, 
                Arrays.<Type>asList(new DynamicArray<StaticArray2>(
                        StaticArray2.class,
                        org.fisco.bcos.sdk.v3.codec.Utils.typeMap(b, StaticArray2.class,
                Bytes32.class))),
                Collections.<TypeReference<?>>emptyList(), 0);
        return asyncExecuteTransaction(function, callback);
    }

    public Tuple1<List<List<byte[]>>> getSetBytes32StaticArrayArrayInput(
            TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_SETBYTES32STATICARRAYARRAY, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<StaticArray2<Bytes32>>>() {}));
        List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<List<List<byte[]>>>(

                convertToNative((List<StaticArray2<Bytes32>>) results.get(0).getValue())
                );
    }

    public Tuple1<List<List<byte[]>>> getSetBytes32StaticArrayArrayOutput(
            TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_SETBYTES32STATICARRAYARRAY, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<StaticArray2<Bytes32>>>() {}));
        List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<List<List<byte[]>>>(

                convertToNative((List<StaticArray2<Bytes32>>) results.get(0).getValue())
                );
    }

    public TransactionReceipt setBytesArrayArray(List<List<byte[]>> b) {
        final Function function = new Function(
                FUNC_SETBYTESARRAYARRAY, 
                Arrays.<Type>asList(new DynamicArray<DynamicArray>(
                        DynamicArray.class,
                        org.fisco.bcos.sdk.v3.codec.Utils.typeMap(b, DynamicArray.class,
                DynamicBytes.class))),
                Collections.<TypeReference<?>>emptyList(), 0);
        return executeTransaction(function);
    }

    public Function getMethodSetBytesArrayArrayRawFunction(List<List<byte[]>> b) throws
            ContractException {
        final Function function = new Function(FUNC_SETBYTESARRAYARRAY, 
                Arrays.<Type>asList(new DynamicArray<DynamicArray>(
                        DynamicArray.class,
                        org.fisco.bcos.sdk.v3.codec.Utils.typeMap(b, DynamicArray.class,
                DynamicBytes.class))),
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<DynamicArray<DynamicBytes>>>() {}));
        return function;
    }

    public String getSignedTransactionForSetBytesArrayArray(List<List<byte[]>> b) {
        final Function function = new Function(
                FUNC_SETBYTESARRAYARRAY, 
                Arrays.<Type>asList(new DynamicArray<DynamicArray>(
                        DynamicArray.class,
                        org.fisco.bcos.sdk.v3.codec.Utils.typeMap(b, DynamicArray.class,
                DynamicBytes.class))),
                Collections.<TypeReference<?>>emptyList(), 0);
        return createSignedTransaction(function);
    }

    public String setBytesArrayArray(List<List<byte[]>> b, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_SETBYTESARRAYARRAY, 
                Arrays.<Type>asList(new DynamicArray<DynamicArray>(
                        DynamicArray.class,
                        org.fisco.bcos.sdk.v3.codec.Utils.typeMap(b, DynamicArray.class,
                DynamicBytes.class))),
                Collections.<TypeReference<?>>emptyList(), 0);
        return asyncExecuteTransaction(function, callback);
    }

    public Tuple1<List<List<byte[]>>> getSetBytesArrayArrayInput(
            TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_SETBYTESARRAYARRAY, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<DynamicArray<DynamicBytes>>>() {}));
        List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<List<List<byte[]>>>(

                convertToNative((List<DynamicArray<DynamicBytes>>) results.get(0).getValue())
                );
    }

    public Tuple1<List<List<byte[]>>> getSetBytesArrayArrayOutput(
            TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_SETBYTESARRAYARRAY, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<DynamicArray<DynamicBytes>>>() {}));
        List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<List<List<byte[]>>>(

                convertToNative((List<DynamicArray<DynamicBytes>>) results.get(0).getValue())
                );
    }

    public TransactionReceipt setBytesStaticArrayArray(List<List<byte[]>> b) {
        final Function function = new Function(
                FUNC_SETBYTESSTATICARRAYARRAY, 
                Arrays.<Type>asList(new DynamicArray<StaticArray2>(
                        StaticArray2.class,
                        org.fisco.bcos.sdk.v3.codec.Utils.typeMap(b, StaticArray2.class,
                DynamicBytes.class))),
                Collections.<TypeReference<?>>emptyList(), 0);
        return executeTransaction(function);
    }

    public Function getMethodSetBytesStaticArrayArrayRawFunction(List<List<byte[]>> b) throws
            ContractException {
        final Function function = new Function(FUNC_SETBYTESSTATICARRAYARRAY, 
                Arrays.<Type>asList(new DynamicArray<StaticArray2>(
                        StaticArray2.class,
                        org.fisco.bcos.sdk.v3.codec.Utils.typeMap(b, StaticArray2.class,
                DynamicBytes.class))),
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<StaticArray2<DynamicBytes>>>() {}));
        return function;
    }

    public String getSignedTransactionForSetBytesStaticArrayArray(List<List<byte[]>> b) {
        final Function function = new Function(
                FUNC_SETBYTESSTATICARRAYARRAY, 
                Arrays.<Type>asList(new DynamicArray<StaticArray2>(
                        StaticArray2.class,
                        org.fisco.bcos.sdk.v3.codec.Utils.typeMap(b, StaticArray2.class,
                DynamicBytes.class))),
                Collections.<TypeReference<?>>emptyList(), 0);
        return createSignedTransaction(function);
    }

    public String setBytesStaticArrayArray(List<List<byte[]>> b, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_SETBYTESSTATICARRAYARRAY, 
                Arrays.<Type>asList(new DynamicArray<StaticArray2>(
                        StaticArray2.class,
                        org.fisco.bcos.sdk.v3.codec.Utils.typeMap(b, StaticArray2.class,
                DynamicBytes.class))),
                Collections.<TypeReference<?>>emptyList(), 0);
        return asyncExecuteTransaction(function, callback);
    }

    public Tuple1<List<List<byte[]>>> getSetBytesStaticArrayArrayInput(
            TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_SETBYTESSTATICARRAYARRAY, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<StaticArray2<DynamicBytes>>>() {}));
        List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<List<List<byte[]>>>(

                convertToNative((List<StaticArray2<DynamicBytes>>) results.get(0).getValue())
                );
    }

    public Tuple1<List<List<byte[]>>> getSetBytesStaticArrayArrayOutput(
            TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_SETBYTESSTATICARRAYARRAY, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<StaticArray2<DynamicBytes>>>() {}));
        List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<List<List<byte[]>>>(

                convertToNative((List<StaticArray2<DynamicBytes>>) results.get(0).getValue())
                );
    }

    public static ComplexCodecTest load(String contractAddress, Client client,
            TransactionManager transactionManager) {
        return new ComplexCodecTest(contractAddress, client, transactionManager);
    }

    public static ComplexCodecTest load(String contractAddress, Client client) {
        return new ComplexCodecTest(contractAddress, client, new ProxySignTransactionManager(client));
    }

    public static ComplexCodecTest deploy(Client client, CryptoKeyPair credential, StructA a) throws
            ContractException {
        byte[] encodedConstructor = FunctionEncoder.encodeConstructor(Arrays.<Type>asList(a));
        ComplexCodecTest contract = deploy(ComplexCodecTest.class, client, credential, getBinary(client.getCryptoSuite()), getABI(), encodedConstructor, null);
        contract.setTransactionManager(new ProxySignTransactionManager(client));
        return contract;
    }

    public static class StaticStruct extends org.fisco.bcos.sdk.v3.codec.datatypes.StaticStruct {
        public BigInteger i1;

        public BigInteger u1;

        public List<BigInteger> b1;

        public StaticStruct(Int128 i1, Uint128 u1, StaticArray1<Int32> b1) {
            super(i1,u1,b1);
            this.i1 = i1.getValue();
            this.u1 = u1.getValue();
            this.b1 = b1.getValue().stream().map(Int32::getValue).collect(java.util.stream.Collectors.toList());
        }

        public StaticStruct(BigInteger i1, BigInteger u1, List<BigInteger> b1) {
            super(new Int128(i1),new Uint128(u1),new StaticArray1<Int32>(Int32.class, b1.stream().map(Int32::new).collect(java.util.stream.Collectors.toList())));
            this.i1 = i1;
            this.u1 = u1;
            this.b1 = b1;
        }
    }

    public static class StructA extends DynamicStruct {
        public List<String> value_str;

        public List<byte[]> bytes32_in_struct;

        public StructA(DynamicArray<Utf8String> value_str,
                DynamicArray<Bytes32> bytes32_in_struct) {
            super(value_str,bytes32_in_struct);
            this.value_str = value_str.getValue().stream().map(Utf8String::getValue).collect(java.util.stream.Collectors.toList());
            this.bytes32_in_struct = bytes32_in_struct.getValue().stream().map(Bytes32::getValue).collect(java.util.stream.Collectors.toList());
        }

        public StructA(List<String> value_str, List<byte[]> bytes32_in_struct) {
            super(new DynamicArray<Utf8String>(Utf8String.class, value_str.stream().map(Utf8String::new).collect(java.util.stream.Collectors.toList())),new DynamicArray<Bytes32>(Bytes32.class, bytes32_in_struct.stream().map(Bytes32::new).collect(java.util.stream.Collectors.toList())));
            this.value_str = value_str;
            this.bytes32_in_struct = bytes32_in_struct;
        }
    }

    public static class StructB extends DynamicStruct {
        public List<String> d_str;

        public DynamicArray<StructA> a_struct;

        public StructB(DynamicArray<Utf8String> d_str, DynamicArray<StructA> a_struct) {
            super(d_str,a_struct);
            this.d_str = d_str.getValue().stream().map(Utf8String::getValue).collect(java.util.stream.Collectors.toList());
            this.a_struct = a_struct;
        }

        public StructB(List<String> d_str, DynamicArray<StructA> a_struct) {
            super(new DynamicArray<Utf8String>(Utf8String.class, d_str.stream().map(Utf8String::new).collect(java.util.stream.Collectors.toList())),a_struct);
            this.d_str = d_str;
            this.a_struct = a_struct;
        }
    }
}
